<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 4.2.1">
  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">

<link rel="stylesheet" href="/css/main.css">


<link rel="stylesheet" href="/lib/font-awesome/css/font-awesome.min.css">

<script id="hexo-configurations">
    var NexT = window.NexT || {};
    var CONFIG = {"hostname":"yoursite.com","root":"/","scheme":"Gemini","version":"7.8.0","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12,"onmobile":false},"copycode":{"enable":false,"show_result":false,"style":null},"back2top":{"enable":true,"sidebar":false,"scrollpercent":false},"bookmark":{"enable":false,"color":"#222","save":"auto"},"fancybox":false,"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"algolia":{"hits":{"per_page":10},"labels":{"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}},"localsearch":{"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}}};
  </script>

  <meta property="og:type" content="website">
<meta property="og:title" content="Lcxiao&#39;s blog">
<meta property="og:url" content="http://yoursite.com/page/2/index.html">
<meta property="og:site_name" content="Lcxiao&#39;s blog">
<meta property="og:locale" content="zh_CN">
<meta property="article:author" content="lcxiao">
<meta name="twitter:card" content="summary">

<link rel="canonical" href="http://yoursite.com/page/2/">


<script id="page-configurations">
  // https://hexo.io/docs/variables.html
  CONFIG.page = {
    sidebar: "",
    isHome : true,
    isPost : false,
    lang   : 'zh-CN'
  };
</script>

  <title>Lcxiao's blog</title>
  






  <noscript>
  <style>
  .use-motion .brand,
  .use-motion .menu-item,
  .sidebar-inner,
  .use-motion .post-block,
  .use-motion .pagination,
  .use-motion .comments,
  .use-motion .post-header,
  .use-motion .post-body,
  .use-motion .collection-header { opacity: initial; }

  .use-motion .site-title,
  .use-motion .site-subtitle {
    opacity: initial;
    top: initial;
  }

  .use-motion .logo-line-before i { left: initial; }
  .use-motion .logo-line-after i { right: initial; }
  </style>
</noscript>

<link rel="alternate" href="/atom.xml" title="Lcxiao's blog" type="application/atom+xml">
</head>

<body itemscope itemtype="http://schema.org/WebPage">
  <div class="container use-motion">
    <div class="headband"></div>

    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-nav-toggle">
    <div class="toggle" aria-label="切换导航栏">
      <span class="toggle-line toggle-line-first"></span>
      <span class="toggle-line toggle-line-middle"></span>
      <span class="toggle-line toggle-line-last"></span>
    </div>
  </div>

  <div class="site-meta">

    <a href="/" class="brand" rel="start">
      <span class="logo-line-before"><i></i></span>
      <h1 class="site-title">Lcxiao's blog</h1>
      <span class="logo-line-after"><i></i></span>
    </a>
  </div>

  <div class="site-nav-right">
    <div class="toggle popup-trigger">
    </div>
  </div>
</div>




<nav class="site-nav">
  <ul id="menu" class="menu">
        <li class="menu-item menu-item-home">

    <a href="/" rel="section"><i class="fa fa-fw fa-home"></i>首页</a>

  </li>
        <li class="menu-item menu-item-about">

    <a href="/about/" rel="section"><i class="fa fa-fw fa-user"></i>关于</a>

  </li>
        <li class="menu-item menu-item-tags">

    <a href="/tags/" rel="section"><i class="fa fa-fw fa-tags"></i>标签</a>

  </li>
        <li class="menu-item menu-item-categories">

    <a href="/categories/" rel="section"><i class="fa fa-fw fa-th"></i>分类</a>

  </li>
        <li class="menu-item menu-item-archives">

    <a href="/archives/" rel="section"><i class="fa fa-fw fa-archive"></i>归档</a>

  </li>
        <li class="menu-item menu-item-lifestyle">

    <a href="/lifestyle/" rel="section"><i class="fa fa-fw fa-lifestyle"></i>LifeStyle</a>

  </li>
  </ul>
</nav>




</div>
    </header>

    
  <div class="back-to-top">
    <i class="fa fa-arrow-up"></i>
    <span>0%</span>
  </div>


    <main class="main">
      <div class="main-inner">
        <div class="content-wrap">
          

          <div class="content index posts-expand">
            
      
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="http://yoursite.com/2020/06/19/21-Linux%E5%86%85%E6%A0%B8%E6%A8%A1%E5%9D%97%E5%8F%8A%E5%8A%9F%E8%83%BD/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="lcxiao">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Lcxiao's blog">
    </span>
      <header class="post-header">
        <h2 class="post-title" itemprop="name headline">
          
            <a href="/2020/06/19/21-Linux%E5%86%85%E6%A0%B8%E6%A8%A1%E5%9D%97%E5%8F%8A%E5%8A%9F%E8%83%BD/" class="post-title-link" itemprop="url">Linux内核模块及功能</a>
        </h2>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>
              

              <time title="创建时间：2020-06-19 14:49:19 / 修改时间：22:49:36" itemprop="dateCreated datePublished" datetime="2020-06-19T14:49:19+08:00">2020-06-19</time>
            </span>

          

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
          <h2 id="CentOS启动流程–POST–Bootloader（BIOS，MBR）–kernel-–-rootfs-—switch-root–sbin-init"><a href="#CentOS启动流程–POST–Bootloader（BIOS，MBR）–kernel-–-rootfs-—switch-root–sbin-init" class="headerlink" title="CentOS启动流程–POST–Bootloader（BIOS，MBR）–kernel – rootfs —switch root–sbin/init"></a>CentOS启动流程–POST–Bootloader（BIOS，MBR）–kernel – rootfs —switch root–sbin/init</h2><h2 id="ldd-打印共享依赖库"><a href="#ldd-打印共享依赖库" class="headerlink" title="ldd 打印共享依赖库"></a>ldd 打印共享依赖库</h2><p><code>ldd /bin/ls | grep -o &quot;/lib[^[:space:]]*&quot;</code></p>
<p>内核设计体系：<br>单内核、微内核<br>linux：单内核设计，但充分借鉴了微内核设计体系的设计有点，为内核引入了模块化机制；</p>
<h2 id="内核的组成部分："><a href="#内核的组成部分：" class="headerlink" title="内核的组成部分："></a>内核的组成部分：</h2><pre><code>kernel：内核核心，一般为bzimage，通常位于/boot目录、名称为vmlinuz-VERSION-release;
kernel object：内核对象，即内核模块、一般防止与/lib/modules/VERSION-release/
    内核模块与内核核心版本一定要严格匹配；
    [ ]：N
    [M]：Module
    [*]：Y、编译至内核核心
内核模块：动态装载和卸载；</code></pre><p>ramdisk ：辅助性文件，并非必须的，这取决与内核是否能直接驱动rootfs所在的设备；<br>    目标设备驱动，例如SCSI设备的驱动；<br>    逻辑设备驱动，例如LVM设备的驱动<br>    文件系统，例如xfs文件系统；</p>
<pre><code>ramdisk：是一个简装版的根文件系统；（运行与内存的系统）
下一步要做跟切换，持久化</code></pre><h2 id="内核信息获取："><a href="#内核信息获取：" class="headerlink" title="内核信息获取："></a>内核信息获取：</h2><h3 id="uname-：print-system-information"><a href="#uname-：print-system-information" class="headerlink" title="uname ：print system information"></a>uname ：print system information</h3><pre><code>-a ：all
-r ：release号，发行号
-m ：machine 平台架构
-n ：当前主机名</code></pre><p>模块信息获取：</p>
<h3 id="lsmod"><a href="#lsmod" class="headerlink" title="lsmod"></a>lsmod</h3><p>显示当前系统的</p>
<h3 id="modinfo"><a href="#modinfo" class="headerlink" title="modinfo"></a>modinfo</h3><p>显示模块详细信息；<br>-F field    ：仅显示指定字段的信息<br>-n 显示文件路径</p>
<h3 id="modprobe"><a href="#modprobe" class="headerlink" title="modprobe"></a>modprobe</h3><p>实现模块动态装载卸载<br>默认是/etc/modprobe.conf<br>格式:<br><code>modprobe MODULE_NAME</code> 装载模块<br><code>modprobe -r MODULE_NAME</code> ：卸载模块</p>
<p>不要随便卸载模块，除非你知道自己在做什么；</p>
<h3 id="depmod"><a href="#depmod" class="headerlink" title="depmod"></a>depmod</h3><p>生成modules.dep和map文件；<br>内核模块依赖关系生成的工具；</p>
<h3 id="模块的装载和卸载的另一组命令："><a href="#模块的装载和卸载的另一组命令：" class="headerlink" title="模块的装载和卸载的另一组命令："></a>模块的装载和卸载的另一组命令：</h3><p><code>insmode</code><br>    <code>insmode [filename] [module options...]
        filename :模块的文件路径</code>rmmode<code></code>rmmod btrfs`<br>    rmmod [-f] [-s] [-v] [modulename]</p>
<p>ramdisk 文件的管理；</p>
<ol>
<li>mkinitrd<ol>
<li>为使用中的内核重新制作ramfs文件；</li>
<li>–with=<module>：除了默认的模块之外需要装载至initramfs中的模块</li>
<li>–preload=<module>:initramfs所提供的模块需要预先装载的模块；</li>
<li>mkinitrd /boot/initramfs-$(uname -r) $(uname -r)</li>
</ol>
</li>
<li>dracut   较为底层的制作initramfs文件的工具（选项较多，强大）<ol>
<li>dracut [option…] <image> [<kernel version>]<br>例：<code>dracut initramfs-$(uname -r).img $(uname -r)</code></li>
</ol>
</li>
</ol>
<h2 id="操作系统上的两个伪文件系统："><a href="#操作系统上的两个伪文件系统：" class="headerlink" title="操作系统上的两个伪文件系统："></a>操作系统上的两个伪文件系统：</h2><p>/proc<br>    内核状态及统计信息的输出接口；同时，还提供了一个配置接口：/proc/sys<br>    参数：<br>        只读；信息输出/proc/#/*<br>        可写：可接受用户指定的一个“新值“来实现对内核某功能和特性的配置；/proc/sys</p>
<p>/sys    调优就是改这里的参数<br>必须充分理解内核各项参数</p>
<p>不应该使用文本编辑器命令去编辑<br>而是应该使用重定向的方式去覆盖里面的值</p>
<ol>
<li>sysctl ：专用的命令</li>
</ol>
<p><code>sysctl net.ipv4.ip_forward</code><br><code>sysctl -w net.ipv4.ip_forward=1</code></p>
<pre><code>sysctl -a ：显示所有可修改的值；
sysctl variable； 对用/proc/sys目录下有对应关系的文件
修改其值：
    #sysctl -w variable=value   写入
    -p ：从指定文件中加载；默认是/etc/sysctl.conf
    直接sysctl -p 就可以，必要时可以添加文件路径；</code></pre><ol start="2">
<li>文件系统命令<br> 查看：cat /proc/sys/net/ipv4/ip_forward<br> 设定：echo “VALUE” &gt; /proc/sys/net/ipv4/ip_forward</li>
</ol>
<p>注意，这两种方式设定的只是当前有效，重启失效<br>要永久有效必须保存至文件/etc/sysctl.conf 、/etc/sysctl.d/*.conf</p>
<p>内核参数：核心转发/proc/sys/net/ipv4/ip_forward<br>        vm.drop_cache   缓存的内存 （0、1、2）<br>        kernel.hostname 主机名<br>        /proc/sys/net/ipv4/icmp_echo_ignore_all 忽略ping操作</p>
<p>sysfs ：/sys 目录<br>输出内核识别出的各硬件设备的相关属性信息，也有内核对硬件特性的可设置参数，对此些参数的修改，即可定制硬件设备工作特性；</p>
<p>udev：通过读取/sys目录下的硬件设备信息，按需为硬件设备创建设备文件；<br>udev 是用户空间程序；正是/sys的存在才能创建设备</p>
<p>专用工具：<br>devadmin<br>hotplug<br>udev为设备创建设备文件时，会读取事先定义好的规则文件，一般在/etc/udev/rules.d/目录下，以及/usr/lib/udev/rules.d/</p>

      
    </div>

    
    
    
      <footer class="post-footer">
        <div class="post-eof"></div>
      </footer>
  </article>
  
  
  

      
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="http://yoursite.com/2020/06/15/20-grub%E7%B3%BB%E7%BB%9F%E9%85%8D%E7%BD%AE%E4%B8%8E%E4%BD%BF%E7%94%A8/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="lcxiao">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Lcxiao's blog">
    </span>
      <header class="post-header">
        <h2 class="post-title" itemprop="name headline">
          
            <a href="/2020/06/15/20-grub%E7%B3%BB%E7%BB%9F%E9%85%8D%E7%BD%AE%E4%B8%8E%E4%BD%BF%E7%94%A8/" class="post-title-link" itemprop="url">20.grub系统配置与使用</a>
        </h2>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>
              

              <time title="创建时间：2020-06-15 13:11:21 / 修改时间：21:11:36" itemprop="dateCreated datePublished" datetime="2020-06-15T13:11:21+08:00">2020-06-15</time>
            </span>

          

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
          <h1 id="GRUB-（Boot-Loader）"><a href="#GRUB-（Boot-Loader）" class="headerlink" title="GRUB （Boot Loader）"></a>GRUB （Boot Loader）</h1><p>grub0.x grub legacy<br>    stage1  MBR<br>    stage1.5    MBR之后的扇区，让stage1中的bootloader能识别stage2所在的分区上的文件系统<br>    stage2  磁盘分区（/boot/grub）</p>
<pre><code>配置文件：/boot/grub/grub.conf &lt;-- /etc/grub.conf

stage2及内核通常防止与一个基本磁盘分区；</code></pre><p>功用：</p>
<ol>
<li>提供一个菜单、并提供交互式接口<br> e：编辑模式，用于编辑菜单：<br> c：命令模式，交互式接口</li>
<li>加载用户选择的内核或操作系统<br> 允许传递参数给内核<br> 可隐藏此菜单</li>
<li>为菜单提供了包含机制<br> 为编辑菜单进行认证<br> 为启用内核或操作系统进行认证</li>
</ol>
<h2 id="grep的命令行接口"><a href="#grep的命令行接口" class="headerlink" title="grep的命令行接口"></a>grep的命令行接口</h2><p>help ：获取帮助列表<br>help keyword：详细帮助信息<br>find （hd0，0）/PATH/TO/FILE<br>root （hd#，#）设置为grub的根<br>kernel /PATH/TO/KERNEL_FILE ：设定本次启动时用到的内核文件；<br>initrd /PATH/TO/INITRAMFS_FILE:设定为选定的内核提供额外文件的ramdisk：<br>boot：引导启动选定的内核</p>
<p>手动在grub命令行接口启动系统：<br>grub&gt;root (hd#,#)<br>grub&gt; kernel /vmlinux—<br>grub&gt; initrd /initramfs—<br>grub&gt; boot</p>
<p>配置文件/boot/grub/grub.conf<br>    配置项：<br>    default=#：设定默认启动的菜单项：落单项（title）编号从0开始；<br>    timeout=#:指定菜单项等待选项选择的时长；<br>    splashimage=（hd#，#）/PATH/TO/XPM_PIC_FILE ：指明菜单背景图片的文件路径；<br>    hideenmenu：隐藏菜单<br>    title TITLE：定义菜单项”标题“，可出现多次，引导多个不同的内核<br>    root（hd#，#） ：grub查找stage2及kernel文件所在设备分区：为grub的根；<br>    kernel /PATH/TO/VMLINUZ_FILE :启动的内核<br>    initrd /PATH/TO/initramfs :内核匹配的ramfs文件；<br>    password [–md5] STRING :启动选定的内核或操作系统时进行认证；</p>
<p>grub-md5-crypt 命令<br>输入两次密码后生成一个加密字符串，拷贝至grub配置文件中；</p>
<p>进入单用户模式：</p>
<ul>
<li>编辑grub菜单（选定要编辑的title，而后使用e命令）；</li>
<li>在选定的kernrl后附加<ul>
<li>1，s，S或single都可以</li>
</ul>
</li>
<li>在kernel所在行，键入b命令；</li>
</ul>
<h2 id="安装grub："><a href="#安装grub：" class="headerlink" title="安装grub："></a>安装grub：</h2><p>在运行正常的系统<br>grub-install 命令：<br>可以安装到任意磁盘</p>
<p>例如：挂载另一块磁盘来做启动，</p>
<ul>
<li>为磁盘分区，设置boot分区 /dev/sdb1 根分区/dev/sdb2</li>
<li>挂载分区 mount /dev/sdb1 /mnt/boot   – mount /dev/sdb2 /mnt/sysroot</li>
<li>grub install –root-directory=/mnt /dev/sdb<ul>
<li>在/mnt/boot目录拷贝vmlinuz和initramfs.img文件作为启动内核；</li>
<li>编辑grub配置文件：<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">default=0</span><br><span class="line">timeout=5</span><br><span class="line">title CentOS(<span class="built_in">test</span>)</span><br><span class="line">      root (hd0,0)</span><br><span class="line">      kernel /vmlinuz ro root=/dev/sda1 </span><br><span class="line">      initrd /initramfs.img</span><br></pre></td></tr></table></figure></li>
</ul>
</li>
<li>在/mnt/sysroot文件夹下建立FHS标准文件夹，作为根问价您系统，拷贝bash程序和动态依赖库文件到相同目录<ul>
<li>mkdir -pv bin sbin mnt home usr lib lib64 proc etc media root …</li>
<li>cp /bin/bash /mnt/sysroot/bin</li>
<li>ldd /bin/bash</li>
<li>cp *.so /mnt/sysroot</li>
<li>chroot /mnt/sysroot<br>grub配置文件中 kernerl /vmlinuz ro root=/dev/sda1 (selinux=0) init=/bin/bash</li>
</ul>
</li>
</ul>
<p>有点类似于ARClinux安装的流程；</p>
<h2 id="手动修复损坏的grub：-本机的grub"><a href="#手动修复损坏的grub：-本机的grub" class="headerlink" title="手动修复损坏的grub：(本机的grub)"></a>手动修复损坏的grub：(本机的grub)</h2><ul>
<li><p>grub-install –root-directory=/ /dev/sda</p>
<ul>
<li>–root-directory=（boot目录的父目录）</li>
</ul>
</li>
<li><p>grub命令提示符下安装（要求有boot目录，且存在stage1，stage1.5文件）<br>  grub&gt; root (hd0,0)<br>  grub&gt; setup （hd0）<br>  grub&gt; exit</p>
</li>
<li><p>进入系统安装光盘，进入救援模式：</p>
<ul>
<li>Rescue installed system</li>
<li>或者ESC键输入linux rescue （类似winPE）</li>
<li>–&gt;continue–&gt;挂载在/mnt/sysimage–&gt;shell(start shell)</li>
<li>chroot /mnt/sysroot</li>
<li>在命令提示符下grub-install</li>
<li>exit –&gt; reboot</li>
</ul>
</li>
</ul>
<p>练习：</p>
<ol>
<li>添加硬盘，提供直接单独运行bash系统</li>
<li>破坏本机grub stage1，而后在救援模式下修复之；</li>
<li>为grub设备保护功能；</li>
</ol>
<p>grub的保护password<br>grub-crypt –sha-256        –&gt;        grub-crypt<br>grub-crypt –md5            –&gt;        grub-md5-crypt<br>/etc/grub.conf文件增加下面这一行，则启动时如果需要编辑grub选项需要先按P键输入密码<br>password –encrypted ^9^32kwzzX./3WISQ0C</p>
<p>如果在特定title下添加<br>password –encrypted STRING 则选择引导这个内核或者系统时需要先认证；</p>
<p>如：</p>
<p>grub-md5-crypt</p>
<p>password –md5 STRING</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">default=0</span><br><span class="line">timeout=5</span><br><span class="line">splashimage=(hd0,0)/grub/splash.xpm.gz</span><br><span class="line">hiddenmenu</span><br><span class="line">password --md5 <span class="variable">$1</span><span class="variable">$OOmpy0</span><span class="variable">$wue</span>.j4urx8NNf6wfQZkmF/		<span class="comment">#密码的MD5加密形式</span></span><br><span class="line">title CentOS (2.6.32-754.27.1.el6.x86_64)</span><br><span class="line">        root (hd0,0)</span><br><span class="line">        kernel /vmlinuz-2.6.32-754.27.1.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet</span><br><span class="line">        initrd /initramfs-2.6.32-754.27.1.el6.x86_64.img</span><br><span class="line">title CentOS 6 (2.6.32-754.el6.x86_64)</span><br><span class="line">        lock		<span class="comment">#保护开启</span></span><br><span class="line">        root (hd0,0)</span><br><span class="line">        kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet</span><br><span class="line">        initrd /initramfs-2.6.32-754.el6.x86_64.img</span><br></pre></td></tr></table></figure>



<p>grub-crypt</p>
<p>password –sha-256 STRING</p>
<p>在title后面root上一行可以给要保护的启动项添加lock字段，则自动时必须按p键输入密码才能启动；</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"># (0) Arch Linux</span><br><span class="line">title  Arch Linux</span><br><span class="line">lock</span><br><span class="line">root   (hd0,1)</span><br><span class="line">kernel &#x2F;boot&#x2F;vmlinuz-linux root&#x3D;&#x2F;dev&#x2F;disk&#x2F;by-label&#x2F;Arch_Linux ro</span><br><span class="line">initrd &#x2F;boot&#x2F;initramfs-linux.img</span><br></pre></td></tr></table></figure>



<p>如果boot分区单独分区的话，此分区就是grub的根分区；<br>/vmlinuz<br>/grub/grub.conf</p>
<p>如果没有单独分区的话，<br>这个分区是根，那么vmlinuz文件就是在/boot/vmlinuz<br>/boot/grub/grub.conf</p>
<p>grub访问的一般为基本磁盘分区<br>单独分区是因为根文件系统比较复杂；</p>
<p>如何识别设备：<br>hd#，#      两个数字的含义：第几块磁盘，第几个分区；<br>（hd0，0） 第一个磁盘的第一个主分区；</p>
<p>grub1.x grub2</p>

      
    </div>

    
    
    
      <footer class="post-footer">
        <div class="post-eof"></div>
      </footer>
  </article>
  
  
  

      
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="http://yoursite.com/2020/06/15/19-Linux%E7%B3%BB%E7%BB%9F%E5%90%AF%E5%8A%A8%E6%B5%81%E7%A8%8B/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="lcxiao">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Lcxiao's blog">
    </span>
      <header class="post-header">
        <h2 class="post-title" itemprop="name headline">
          
            <a href="/2020/06/15/19-Linux%E7%B3%BB%E7%BB%9F%E5%90%AF%E5%8A%A8%E6%B5%81%E7%A8%8B/" class="post-title-link" itemprop="url">19.Linux系统启动流程</a>
        </h2>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>
              

              <time title="创建时间：2020-06-15 13:10:58 / 修改时间：21:11:12" itemprop="dateCreated datePublished" datetime="2020-06-15T13:10:58+08:00">2020-06-15</time>
            </span>

          

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
          <h1 id="系统启动流程"><a href="#系统启动流程" class="headerlink" title="系统启动流程"></a>系统启动流程</h1><p>Linux系统组成部分：内核，根文件系统<br>内核：进程管理，内存管理、网络协议栈、文件系统、驱动程序、安全功能（加密解密协议栈。selinux）<br>    IPC：Inter Process Communication<br>    消息队列、semerphor、shm<br>    socket<br>文件系统工作在内核空间</p>
<p>启动分区：/boot<br>rootfs：FHS：/bin /sbin /lib /proc /sys /etc<br>init 程序–</p>
<p>内核设计流派：</p>
<ul>
<li>单内核 ：所有功能集成与同一个程序；<ul>
<li>Linux</li>
</ul>
</li>
<li>微内核 ：每种功能使用一个单独的子系统实现；<ul>
<li>Windows，Solaris</li>
</ul>
</li>
</ul>
<p>Linux内核特点：</p>
<ul>
<li>支持模块化    .ko（Kernel Object）</li>
<li>支持模块运行时动态装载或卸载；</li>
<li>ramdisk 使用缓存和缓冲来加速对磁盘上的文件访问；</li>
</ul>
<p>Linux内核组成部分：</p>
<ul>
<li>核心文件  /boot/vmlinuz-VERSION-release</li>
<li>模块文件  /lib/modules/VERSION-release</li>
</ul>
<p>vmlinux —-&gt; ramdisk —-&gt; rootfs<br>内核    –  临时根文件系统  –  切换真正的根文件系统<br>ramdisk：<br>centos5 /boot/initrd-VERSION-release.img<br>CentOS6,7: /boot/initramfs-VERSION-release.img</p>
<p>模块文件：/lib/modules/VERSION-release </p>
<p>PC架构的主机系统启动流程，（MBR）：<br>POST：rom（只读）CMOS –BIOS–basic input output system<br>ROM + RAM<br>加电自检<br>Boot Sequence：启动次序,按次序查找各引导设备；第一个有引导程序的设备即为本次启动要用到的设备；<br>bootloader：引导加载器，程序；<br>    windows：ntloader<br>    linux：<br>        LILO：Linux loader<br>        grub ：grand uniform BootLoader<br>        grub0.X grub legacy<br>        grub1.x grub2<br>功能：提供一个界面，允许用户选择要启动的系统或者不同版本的内核，把用户选定的内核装载到RAM中的特定空间中，解压、展开而后把系统控制权移交给内核；</p>
<p>MBR：Master Boot Record<br>    512bytes:<br>        446bytes:bootloader<br>        64bits:fat<br>        2bytes:55AA<br>GRUB:<br>    Bootloader:1st stage<br>    partition :filesystem driver ,1.5 stage<br>    partition : /boot/grub 2nd stage</p>
<p>之后是kernel：<br>    自身初始化：<br>        探测可识别到的所有硬件设备<br>        加载硬件驱动程序；（有可能会借助于ramdisk加载驱动）<br>        以只读方式挂载根文件系统；<br>        运行用户空间的第一个程序；INIT?<br>    ramdisk 动态创建；</p>
<p>INIT文件类型:<br>SYSV,Upstart,Systemd<br>    CentOS5:SysV init 配置文件/etc/inittab<br>    CentOS6: Upstart /etc/inittab   /etc/init/*.conf<br>    CentOS7:Systemd 配置文件：/usr/lib/systemd/system/,/etc/systemd/system<br>注意GPT、UEFI可能不一样？</p>
<p>安卓手机使用lilo引导</p>
<p>对自己编译的内核来说，ramdisk可以是非必须的，（直接把硬盘驱动编译至内核）<br>可以使用工具创建：<br>CentOS5：mkinitrd<br>centos6，7<br>initramfs 工具程序<br>dracut ，mkinitrd</p>
<p>系统初始化流程（内核级别）：POST–BootSequence（BIOS）–BootLoader（MBR）–kernel(ramdisk)–rootfs(readonly)–/sbin/init?</p>
<p>sbin/init:<br>SysV init:<br>运行级别 （0-6）</p>
<ul>
<li>0 ：关机</li>
<li>1 单用户级别  root 无需认证 ；维护模式</li>
<li>2 带网络的单用户  启动网络功能，不会启动NFS，维护模式</li>
<li>3 multiuser mode 多用户。完全认证，完整模式</li>
<li>4 预留，未用</li>
<li>5 graphic mode 图形界面</li>
<li>6 重启</li>
</ul>
<p>默认3 5<br>级别切换 init #<br>级别查看：<br>who -r<br>runlevel</p>
<p>配置文件： /etc/inittab</p>
<p>CentOS5：每行定义一种action以及与之对应的process<br>id：runlevels：action：process<br>    id：一个任务的标识符<br>    runleves：在哪些级别启动此任务；#，###，也可以为空，表示所有级别；<br>    action：在什么条件下启动此任务；<br>    process：任务；</p>
<p>action：<br>    wait：等待切换至此任务所在的级别时执行一次；<br>    respawn：一旦此任务终止，就自动重新启动之；<br>    initdefault：设定默认运行级别；此时，process省略；<br>    sysinit：设定系统初始化方式，此处一般为指定/etc/rc.d/ec.sysinit脚本；</p>
<p>例如：<br>id：3:initdefault:<br>si::sysinit:/etc/rc.d/ec.sysinit<br>l0:0:wait:/etc/rc.d/rc 0<br>    意味着去启动或关闭/etc/rc.d/rc3.d/目录下的服务脚本所控制服务；<br>    K* ：要停止的服务；K##<em>，优先级，数字越小，越是优先关闭；依赖的服务先关闭；而后关闭被依赖的；<br>    S</em>：要启动的服务；S##*，优先级，数字越小，越是优先启动，被依赖的服务先启动，而依赖的服务后启动；</p>
<p>rc脚本：接受一个运行级别数字为参数；<br>脚本框架:<br>for srv in /etc/rc.d/rc#.d/K*;do<br>    $srv stop<br>done</p>
<p>for srv in /etc/rc.d/rc#.d/S*;do<br>    $srv start<br>done</p>
<p>/etc/init.d/* 脚本执行方式：<br>service SRV_SCRIPT {start | stop | status |restart}<br>/etc/init.d/SRV_SCRIPT {start | stop |status |restart}</p>
<p>Chkconfig 管理这些脚本软连接的<br>管控/etc/init.d /每个服务脚本在各级别下的启动和关闭状态；</p>
<p>chkconfig SERVICE on | off<br>脚本文件中 “-” 表示 所有级别全关<br>chkconfig –list</p>
<p>刚添加的脚本还没有创建链接？<br>chkconfig –add<br>chkconfig –del</p>
<p>#chkconfig：LLL NN NN   LLL：运行级别。NN：开启优先级 NN：关闭优先级<br>#description：说明</p>
<p>修改指定的链接类型<br>chkconfig {–level LEVELS} name 《on | off | reset》<br>默认2345</p>
<p>正常级别下，最后一个启动的服务S99local没有链接至/etc/init.d下的某脚本，而是链接到了/etc/rc.d/rc.local脚本；因此，不方便或者不需写服务脚本的程序期望开机自动运行时，直接放置于此脚本文件中即可；</p>
<p>rc.local<br>用户自定义开机运行的程序</p>
<p>tty1：:2345：respawn：/usr/sbin/mingetty tty1<br>mingetty会调用login，<br>打开虚拟终端的程序除了mingetty之外，还有诸如getty等；</p>
<p>系统初始化脚本 /etc/rc.d/rc.sysinit</p>
<ul>
<li>设置主机名</li>
<li>设置欢迎信息</li>
<li>激活udev和selinux （udev主要是创建设备文件）</li>
<li>挂载/etc/fstab文件中定义的所有文件系统；</li>
<li>检测根文件系统，并以读写方式重新挂载根文件系统；</li>
<li>设置系统时钟</li>
<li>根据/etc/sysctl.conf文件来设置内核参数</li>
<li>激活LVM及软RAID设备</li>
<li>激活swap设备；</li>
<li>加载额外需要的驱动程序；</li>
<li>清理操作</li>
</ul>
<p>总结（用户空间的启动流程）：/sbin/init (etc/inittab)<br>设置默认运行级别 –&gt; 运行系统初始化脚本 ，完成系统初始化 –&gt; 关闭对应级别下要停止的服务，启动对应级别下需要开启的服务 –&gt; 设置登录终端 –&gt; 【启动图形终端】（可选）；</p>
<p>通读/etc/rc.d/rc.sysinit 文件；搞清楚每一步做了什么？</p>
<p>CentOS6：<br>init程序：upstart，但依然为/sbin/init（/etc/inittab）<br>/etc/init/*.conf /etc/inittab （仅用于定义默认运行级别）</p>
<p>注意：*.conf 为upstart风格的配置文件；</p>
<p>rcS.conf<br>init-system-dbus.conf<br>start-ttys.conf</p>
<p>CentOS7: Systemd,配置文件：/usr/lib/systemd/system/* , /etc/systemd/system/*</p>
<p>systemctl get-default<br>systemctl set-default multi-user.target</p>
<p>systemctl status<br>完全兼容SysV脚本机制；因此，service命令依然可用，但是，建议使用systemctl命令来控制服务</p>
<p>systemctl {status | start | stop | restart | reload} SERVICE</p>
<p>CentOS系统启动流程；</p>

      
    </div>

    
    
    
      <footer class="post-footer">
        <div class="post-eof"></div>
      </footer>
  </article>
  
  
  

      
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="http://yoursite.com/2020/06/15/18-SHELL%E5%BE%AA%E7%8E%AF/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="lcxiao">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Lcxiao's blog">
    </span>
      <header class="post-header">
        <h2 class="post-title" itemprop="name headline">
          
            <a href="/2020/06/15/18-SHELL%E5%BE%AA%E7%8E%AF/" class="post-title-link" itemprop="url">18.SHELL循环</a>
        </h2>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>
              

              <time title="创建时间：2020-06-15 13:10:33 / 修改时间：21:10:46" itemprop="dateCreated datePublished" datetime="2020-06-15T13:10:33+08:00">2020-06-15</time>
            </span>

          

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
          <h1 id="BASH编程"><a href="#BASH编程" class="headerlink" title="BASH编程"></a>BASH编程</h1><p>顺序执行<br>选择执行    if，case<br>循环执行    for，while，until</p>
<h2 id="for循环格式："><a href="#for循环格式：" class="headerlink" title="for循环格式："></a>for循环格式：</h2><p>for VARAIBLE in LIST；do<br>    循环体<br>done</p>
<h2 id="while循环："><a href="#while循环：" class="headerlink" title="while循环："></a>while循环：</h2><p>while CONDITION；do<br>    循环体<br>    循环控制变量修正表达式<br>done</p>
<p>进入条件：CONDITION测试为真<br>退出条件：CONDITION测试为假</p>
<h2 id="until循环：（相当于while测试条件加！号）"><a href="#until循环：（相当于while测试条件加！号）" class="headerlink" title="until循环：（相当于while测试条件加！号）"></a>until循环：（相当于while测试条件加！号）</h2><p>until CONDITION；do<br>    循环体<br>    循环控制变量修正表达式<br>done<br>进入条件：CONDITION测试为假<br>退出条件：CONDITION测试为真</p>
<h2 id="练习："><a href="#练习：" class="headerlink" title="练习："></a>练习：</h2><p>1.求100内偶数之和、100以内奇数之和<br>2、创建10个用户。user101-user110；密码同用户<br>3、打印99乘法表<br>4、打印逆序九九乘法表</p>

      
    </div>

    
    
    
      <footer class="post-footer">
        <div class="post-eof"></div>
      </footer>
  </article>
  
  
  

      
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="http://yoursite.com/2020/06/15/17-%E7%BD%91%E7%BB%9C%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%B7%A5%E5%85%B7/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="lcxiao">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Lcxiao's blog">
    </span>
      <header class="post-header">
        <h2 class="post-title" itemprop="name headline">
          
            <a href="/2020/06/15/17-%E7%BD%91%E7%BB%9C%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%B7%A5%E5%85%B7/" class="post-title-link" itemprop="url">17.网络客户端工具</a>
        </h2>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>
              

              <time title="创建时间：2020-06-15 13:09:56 / 修改时间：21:10:11" itemprop="dateCreated datePublished" datetime="2020-06-15T13:09:56+08:00">2020-06-15</time>
            </span>

          

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
          <h1 id="网络客户端工具"><a href="#网络客户端工具" class="headerlink" title="网络客户端工具"></a>网络客户端工具</h1><p>ping、lftp、lftpget、wget等</p>
<h2 id="ping命令"><a href="#ping命令" class="headerlink" title="ping命令"></a>ping命令</h2><p>ICMP：<br>    echo request 8<br>    echo reply 0<br>ping 发出echo request命令，返回echo reply；</p>
<p>ping [option] DESTINATION<br>    -c #：包个数<br>    -I ：接口<br>    -w ：deadline ping命令超时时长；<br>    -W ：一次ping操作中，<br>    -s ：指定包的大小</p>
<h2 id="hping-："><a href="#hping-：" class="headerlink" title="hping ："></a>hping ：</h2><pre><code>--flood 尽可能的快的发包，压力测试?
--fast  快
--faster    比快更快
-i uX</code></pre><h2 id="traceroute："><a href="#traceroute：" class="headerlink" title="traceroute："></a>traceroute：</h2><p>跟踪从源主机到目标主机之间经过的网关；</p>
<h2 id="ftp命令"><a href="#ftp命令" class="headerlink" title="ftp命令"></a>ftp命令</h2><p>文件传输协议：<br>put ：上传<br>status：状态<br>bye：退出</p>
<h2 id="lftp命令："><a href="#lftp命令：" class="headerlink" title="lftp命令："></a>lftp命令：</h2><p>取代ftp的命令<br>-p port<br>-u user[,pass]</p>
<p>get mget<br>put mput<br>rm</p>
<h2 id="lftpget"><a href="#lftpget" class="headerlink" title="lftpget"></a>lftpget</h2><p>-c ：继续之前的下载</p>
<h2 id="wget"><a href="#wget" class="headerlink" title="wget"></a>wget</h2><p>非交互式的资源下载器：<br>功能强大<br>wget [option]… [URL]…<br>-b：后台下载<br>-q |–quiet 静默下载（不显示下载进度）<br>-O file ：指明下载文件名<br>-c | –continue ：断点续传<br>–progress=type bar（default） dot 进度条格式<br>–limit-rate=amount ：以指定速率下载文件（–limit-rate=20k）</p>

      
    </div>

    
    
    
      <footer class="post-footer">
        <div class="post-eof"></div>
      </footer>
  </article>
  
  
  

      
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="http://yoursite.com/2020/06/15/16-%E8%BF%9B%E7%A8%8B%E5%92%8C%E4%BD%9C%E4%B8%9A%E7%AE%A1%E7%90%86/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="lcxiao">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Lcxiao's blog">
    </span>
      <header class="post-header">
        <h2 class="post-title" itemprop="name headline">
          
            <a href="/2020/06/15/16-%E8%BF%9B%E7%A8%8B%E5%92%8C%E4%BD%9C%E4%B8%9A%E7%AE%A1%E7%90%86/" class="post-title-link" itemprop="url">16.进程和作业管理</a>
        </h2>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>
              

              <time title="创建时间：2020-06-15 13:09:30 / 修改时间：21:09:47" itemprop="dateCreated datePublished" datetime="2020-06-15T13:09:30+08:00">2020-06-15</time>
            </span>

          

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
          <h1 id="Linux系统作业控制："><a href="#Linux系统作业控制：" class="headerlink" title="Linux系统作业控制："></a>Linux系统作业控制：</h1><h2 id="Job："><a href="#Job：" class="headerlink" title="Job："></a>Job：</h2><pre><code>前台作业（foregroud）：通过终端启动，且启动后会一直占据终端；
后台作业（background）：可以通过终端启动，但启动后即转入后台运行（释放终端）；

命令行中启动的命令，如果不支持运行在后台的话，会一直占据前台；</code></pre><h3 id="如何让作业运行于后台"><a href="#如何让作业运行于后台" class="headerlink" title="如何让作业运行于后台"></a>如何让作业运行于后台</h3><pre><code>* 运行中的作业
  * Ctrl+Z
  * 注意：送往后台后，作业转为静止态；
* 尚未启动的作业
  * COMMAAD &amp;
注意：此类作业虽然被送往后台，单其依然与终端相关；如果希望把送网后台的作业剥离与终端的关系：
    nohup command &amp;</code></pre><h3 id="可实现作业控制的常用命令"><a href="#可实现作业控制的常用命令" class="headerlink" title="可实现作业控制的常用命令"></a>可实现作业控制的常用命令</h3><p>fg  把指定作业调回前台；注意，直接加上jobs显示的id即可，后面的+号表示默认fg转入的作业，即优先级；<br>bg  让送往后台的作业在后台继续运行；<br>kill    终止指定的作业；注意一定要加“%”号；</p>
<h2 id="调整进程优先级"><a href="#调整进程优先级" class="headerlink" title="调整进程优先级"></a>调整进程优先级</h2><p>可通过nice值调整的优先级范围：100–139<br>    分别对应于：-20 19<br>进程启动时，其nice值默认为0，其优先级是120；</p>
<h3 id="nice命令"><a href="#nice命令" class="headerlink" title="nice命令:"></a>nice命令:</h3><p>以指定的nice值启动并运行命令<br>nice [option] [command [ARGU]…]<br>nice -n NICE<br>注意：仅管理员可以调低nice值；</p>
<h3 id="renice命令："><a href="#renice命令：" class="headerlink" title="renice命令："></a>renice命令：</h3><pre><code>renice [-n] NICE PID...</code></pre><p>查看NICE值和优先级：<br>    ps axo pid,ni,priority,comm</p>
<h3 id="未涉及的命令："><a href="#未涉及的命令：" class="headerlink" title="未涉及的命令："></a>未涉及的命令：</h3><p>sar、tsar、iostat、lftop、nethog…</p>
<h3 id="htop、dstat、top、ps命令的使用重点掌握；"><a href="#htop、dstat、top、ps命令的使用重点掌握；" class="headerlink" title="htop、dstat、top、ps命令的使用重点掌握；"></a>htop、dstat、top、ps命令的使用重点掌握；</h3>
      
    </div>

    
    
    
      <footer class="post-footer">
        <div class="post-eof"></div>
      </footer>
  </article>
  
  
  

      
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="http://yoursite.com/2020/06/15/15-Linux%E8%BF%9B%E7%A8%8B%E7%AE%A1%E7%90%86%E5%91%BD%E4%BB%A4/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="lcxiao">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Lcxiao's blog">
    </span>
      <header class="post-header">
        <h2 class="post-title" itemprop="name headline">
          
            <a href="/2020/06/15/15-Linux%E8%BF%9B%E7%A8%8B%E7%AE%A1%E7%90%86%E5%91%BD%E4%BB%A4/" class="post-title-link" itemprop="url">15.Linux进程管理命令</a>
        </h2>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>
              

              <time title="创建时间：2020-06-15 13:09:04 / 修改时间：21:09:20" itemprop="dateCreated datePublished" datetime="2020-06-15T13:09:04+08:00">2020-06-15</time>
            </span>

          

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
          <h2 id="系统调用"><a href="#系统调用" class="headerlink" title="系统调用"></a>系统调用</h2><p>read（），open（），write（）；</p>
<p>程序开发成内部多个执行流，每个执行流可单独运行与一个cpu核心上<br>多线程运行编程模型；<br>并行计算；<br>必须拥有多核心才可以；</p>
<p>每个进程分配固定的线程，每个线程实现一个连接；<br>linux线程即进程；</p>
<h2 id="随时鉴定服务器的各种状态；"><a href="#随时鉴定服务器的各种状态；" class="headerlink" title="随时鉴定服务器的各种状态；"></a>随时鉴定服务器的各种状态；</h2><p>cpu、内存、进程<br>垃圾回收策略，<br>运维基本能力；</p>
<p>管理进程的运行数量，占用资源，优先级如何；</p>
<h2 id="进程管理命令"><a href="#进程管理命令" class="headerlink" title="进程管理命令"></a>进程管理命令</h2><p>客户访问慢。全方位去诊断，查看，网络，磁盘，程序bug；（了解程序运行法则）不背锅；</p>
<p>Linux系统上的进程查看及管理工具：<br>pstree、ps、pidof、pgrep、top、htop、glances、pmap、vmstat、dstat、kill、pkill、job、bg、fg、nohup、nice、renice、killall…</p>
<p>CentOS5：SYSV init；<br>CentOS6：UPstart（并行启动）dbus通信<br>CentOS7：Systemd：（红帽的程序员参考MacOS开发）（开关机都非常快）</p>
<h2 id="pstree：查看进程树；"><a href="#pstree：查看进程树；" class="headerlink" title="pstree：查看进程树；"></a>pstree：查看进程树；</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">init-+-getty</span><br><span class="line">     |-getty</span><br><span class="line">     |-getty</span><br><span class="line">     `-getty</span><br></pre></td></tr></table></figure>
<p>Systemd:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">systemd─┬─VGAuthService</span><br><span class="line">        ├─atd</span><br><span class="line">        ├─auditd───&#123;auditd&#125;</span><br><span class="line">        ├─crond</span><br><span class="line">        ├─dbus-daemon───&#123;dbus-daemon&#125;</span><br><span class="line">        ├─login───bash</span><br><span class="line">        ├─lvmetad</span><br><span class="line">        ├─master─┬─pickup</span><br><span class="line">        │        └─qmgr</span><br><span class="line">        ├─mysqld_safe───mysqld───18*[&#123;mysqld&#125;]</span><br><span class="line">        ├─polkitd───6*[&#123;polkitd&#125;]</span><br><span class="line">        ├─rsyslogd───2*[&#123;rsyslogd&#125;]</span><br><span class="line">        ├─sshd───sshd───bash───pstree</span><br><span class="line">        ├─systemd-journal</span><br><span class="line">        ├─systemd-logind</span><br><span class="line">        ├─systemd-udevd</span><br><span class="line">        ├─tuned───4*[&#123;tuned&#125;]</span><br><span class="line">        └─vmtoolsd───&#123;vmtoolsd&#125;</span><br></pre></td></tr></table></figure>

<h2 id="PS："><a href="#PS：" class="headerlink" title="PS："></a>PS：</h2><p>/proc   内核中的状态信息：<br>    内核参数：<br>        可设置其值从而调整内核运行特性的参数:/proc/sys<br>        状态变量：其用于输出内核中统计信息和状态信息，仅用于查看；</p>
<pre><code>参数，模拟成文件系统类型；
proc中数字目录为进程号：
进程：
    /proc/#
        #:PID</code></pre><h2 id="ps：-report-a-snapshot-of-the-current-processes"><a href="#ps：-report-a-snapshot-of-the-current-processes" class="headerlink" title="ps： report a snapshot of the current processes."></a>ps： report a snapshot of the current processes.</h2><p>取当前命令执行这一刻的状态；<br>三种风格：</p>
<p>1   UNIX options, which may be grouped and must be preceded by a dash.<br>2   BSD options, which may be grouped and must not be used with a dash.<br>3   GNU long options, which are preceded by two dashes.</p>
<p>1:带一个“-“<br>2:带两个“-”<br>3：长选项“–”</p>
<p>启动进程的方式：<br>    系统启动过程中自动启动；与终端无关的进程；<br>    用户通过终端启动：与终端相关的进程；</p>
<pre><code>a：所有与终端相关的进程
x：所有与终端无关的进程
    []内核线程
u：以用户为中心组织进程状态信息显示；
    VSZ ：虚拟内存级，占用的虚拟内存大小（非swap）；
    RSS ：常驻内存级；（不能放交换分区的数据）；
    STAT ：当前进程的运行状态：BSD风格；R:running S:interruptable sleeping D :uninter... T :stopped Z:zombie
    带+ 号表示前台进程，
    l ：多线程进程
    N ：高优先级
    &lt; ：高优先级
    s ：session leader
-e ：Unix风格：显示所有进程；
-f ：full format 完整格式的
常用组合2： ps -ef

-F ：显示完整格式的进程信息
    C：cpu utilization CPU占用
    PSR：运行于哪颗cpu上；
-H ：以层级结构显示进程的相关信息；

常用组合之三：-eFH
常用组合之四：
-eo : 自定义要显示的字段；以逗号分割了；
axo ：field1，field2.。。常见的field，pid、nl、prl、psr、pcpu、stat、comm、tty、ppid；
    nl：nice值
    priority：优先级；
    rtprio：实时优先级；</code></pre><h2 id="pgrep、pkill命令："><a href="#pgrep、pkill命令：" class="headerlink" title="pgrep、pkill命令："></a>pgrep、pkill命令：</h2><p>进程过滤    关闭进程<br>pgrep<br>-u ：uid user；<br>-U ：UID read user；<br>-t terminal ：与指定的终端相关的进程；<br>-l ：显示进程名；<br>-a ：显示完整格式的进程名；<br>-p pid ：显示此进程的子进程；</p>
<h2 id="pidof命令"><a href="#pidof命令" class="headerlink" title="pidof命令"></a>pidof命令</h2><p>根据进程名，取其pid</p>
<h2 id="top命令："><a href="#top命令：" class="headerlink" title="top命令："></a>top命令：</h2><p>uptime命令：显示系统时间、运行时长以及平均负载<br>top第一行显示的就是此信息；</p>
<p>PID 用户    优先级  nice值  虚拟内存级  常驻内存级  共享内存级  运行状态    CPU百分比   内存百分比  运行时长</p>
<p>排序<br>P   :以占据cpu百分比排序<br>M   ：以占据内存百分比<br>T   ：累计占用cpu时间排序</p>
<p>首部信息：<br>    uptime信息：l命令<br>    task及cpu信息：t命令<br>    内存信息：m命令</p>
<p>退出：q<br>修改刷新：s<br>终止指定的进程：k</p>
<p>选项：<br>-d #：刷新时间间隔，默认3s<br>-b ：批次方式显示；<br>-n #：显示多少批次；</p>
<h2 id="HTOP"><a href="#HTOP" class="headerlink" title="HTOP"></a>HTOP</h2><pre><code>-d # ：指定延迟时间间隔；
-u USer Name ：仅显示指定用户的进程
-s colume：以指定字段进行排序</code></pre><p>子命令：<br>    l：显示进程所打开的所有文件；<br>    s：跟踪选定的进程的系统调用<br>    t：以层级关系显示各进程状态<br>    a：将选定的进程绑定至某个cpu核心上；</p>
<h2 id="vmstat：报告虚拟内存的使用情况："><a href="#vmstat：报告虚拟内存的使用情况：" class="headerlink" title="vmstat：报告虚拟内存的使用情况："></a>vmstat：报告虚拟内存的使用情况：</h2><p>procs：<br>    r:等待运行的进程的个数；cpu上等待运行的任务的队列长度；<br>    b：处于不可中断睡眠态的进程个数；被阻塞的任务队列的长度；<br>memory：<br>    swpd ：交换内存使用总量；<br>    free ：空闲的物理内存总量<br>    buff ：用于buffee的内存总量<br>    cache :用于cache的内存总量<br>swap：<br>    si : 数据进入swap的速率：单位是（kb/s）<br>    so ：数据离开swap的速率，（kb/s）<br>io：<br>    bi ：从块设备读入数据到系统的速率（kb/s）<br>    bo ：保存数据到块设备的速率（kb/s）<br>system：<br>    in ：中断速率<br>    cs ：上下文切换的速率</p>
<p>cpu ：<br>    us ：用户空间的程序所占用cpu的百分比<br>    sy ：system<br>    id ：idle<br>    wa ：wait<br>    st ：被虚拟化技术偷走的</p>
<p>选项：<br>    -s ：显示内存统计信息；</p>
<h2 id="pmap"><a href="#pmap" class="headerlink" title="pmap"></a>pmap</h2><p>pmap [options] pid […]</p>
<p>pmap -x 1<br>    -x :显示详细格式的信息；<br>    另一种查看的方式<br>    cat /proc/PID/maps</p>
<h2 id="glances-命令："><a href="#glances-命令：" class="headerlink" title="glances 命令："></a>glances 命令：</h2><p>常见选项：<br>    -b ：以Byte为单位显示网卡数据速率；<br>    -d ：关闭磁盘I/O模块<br>    -m ：关闭mount模块<br>    -n ：关闭network模块<br>    -t # ：刷新时间间隔<br>    -1 ：每个cpu的相关数据单独显示；<br>    -o ：指定输出格式；</p>
<h2 id="Dstat"><a href="#Dstat" class="headerlink" title="Dstat:"></a>Dstat:</h2><p>强大的实时系统信息显示：<br>    -c –cpu        CPU相关<br>        -C total<br>    -d –disk       磁盘相关<br>        -D sda sdb total<br>    -g 显示page相关的统计数据<br>    -m 内存相关<br>    -n 网络<br>    -p 进程相关统计<br>    -r IO<br>    -s swap<br>    –tcp 显示tcp<br>    –udp<br>    –raw<br>    –socket</p>
<pre><code>--ipc   进程间通信

--top-cpu 最占用cpu的进程
--top-io 
--top-memory
--top-lantency 延迟最大的进程</code></pre><h2 id="kill-命令：-terminate-a-process"><a href="#kill-命令：-terminate-a-process" class="headerlink" title="kill 命令： terminate a process"></a>kill 命令： terminate a process</h2><p>用于向进程发送信号，以实现对进程的管理；</p>
<p>kill -l 显示系统当前的信号列表<br>每个信号的标识方法有三种：<br>    * 信号的数字标识    1<br>    * 信号的完整名称    SIGHUP<br>    * 信号的简写名称    HUP</p>
<p>向进程发信号：<br>    kill [-s |signal|-SIGNAL] PID…</p>
<pre><code>常用信号：
* 1号进程：SIGHUP ：无需关闭进程让其重读配置文件；
* 2号进程：SIGINT ：中止正在运行的进程，相当于ctrl+C
* 9号进程：SIGKILL ：杀死运行中的进程；不管是否打开文件。直接杀掉；可能会损坏该进程打开的文件
* 15号进程：SIGTERM：终止运行中的进程；
* 18 ：SIGCONT 
* 19 ：SIGSTOP </code></pre><h2 id="killall-命令："><a href="#killall-命令：" class="headerlink" title="killall 命令："></a>killall 命令：</h2><p>kill process by NAME<br><code>killall httpd</code></p>

      
    </div>

    
    
    
      <footer class="post-footer">
        <div class="post-eof"></div>
      </footer>
  </article>
  
  
  

      
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="http://yoursite.com/2020/06/15/14-linux%E8%BF%9B%E7%A8%8B%E5%8E%9F%E7%90%86%E3%80%81%E7%B1%BB%E5%9E%8B%E5%92%8C%E5%86%85%E6%A0%B8%E7%8A%B6%E6%80%81/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="lcxiao">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Lcxiao's blog">
    </span>
      <header class="post-header">
        <h2 class="post-title" itemprop="name headline">
          
            <a href="/2020/06/15/14-linux%E8%BF%9B%E7%A8%8B%E5%8E%9F%E7%90%86%E3%80%81%E7%B1%BB%E5%9E%8B%E5%92%8C%E5%86%85%E6%A0%B8%E7%8A%B6%E6%80%81/" class="post-title-link" itemprop="url">14.linux进程原理、类型和内核状态</a>
        </h2>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>
              

              <time title="创建时间：2020-06-15 13:08:34 / 修改时间：21:08:48" itemprop="dateCreated datePublished" datetime="2020-06-15T13:08:34+08:00">2020-06-15</time>
            </span>

          

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
          <p>软中断、发起内核调用；用户态，内核态，</p>
<p>系统调用：</p>
<p>用户模式（空间）、内核模式（空间）；</p>
<p>用户模式无法完成的操作，需要系统调用；实现模式切换；</p>
<p>内核的功用：进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能；</p>
<p>时间片：按时间片划分资源，</p>
<p>进程优先级概念：</p>
<p>内核负责进程调度，根据优先级调度资源；</p>
<p>进程的当前状态保存下来；</p>
<p>内核在进程切换时需要保存上一个进程运行的现场。保存现场；–&gt; 恢复现场、切换太多会浪费时间；</p>
<p>进程–&gt; 运行中的程序的一个副本：</p>
<p>存在生命周期：</p>
<p>每一个进程结构都相同</p>
<p>内核存储进程的格式：task struct</p>
<p>多个人的task struct组成的链表：链表：有先后次序、（循环链表、双向链表、双向循环链表）</p>
<p>任何进程、在内核无漏洞的情况下、无权运行特权指令；</p>
<p>如果要运行，会出发中断，会立即唤醒内核，内核处理中断；</p>
<p>进程创建：</p>
<p>启动启动时–&gt;运行内核–&gt;创建第一个进程（init）（初始化进程）表示内核空间和用户空间都已经创建，init是负责用户空间管理–&gt;创建子进程</p>
<p>除了init（内核创建）之外，其余进程都是由父进程创建，fork（），clone（）父进程的内存空间也是子进程的内存空间，子进程创建数据需要写实复制。进程 必须是父进程给他销毁（白发送黑发）；子进程是为父进程完成特定任务，子进程任务时，父进程在等待状态，子进程任务结束后，父进程销毁，并继续往下走；</p>
<p>优先级：</p>
<p>0-139</p>
<p>1-99：实时优先级：数字越大—&gt;优先级越高</p>
<p>100-139：静态优先级；用户可控的；，数字越小&lt;—-优先级越高；</p>
<p>NICE值：-20 —- 19</p>
<p>​                    |        |</p>
<p>​                100        139</p>
<p>可以调整一个进程的nice值来控制优先级；</p>
<p>Big O</p>
<p>O(1)、O(logn)、O(n),O(2^n)、O(n^2)</p>
<p>|</p>
<p>|——————————————O(1)</p>
<p>|</p>
<p>|——————————————</p>
<p>优先队列：</p>
<p>运行队列，过期队列；</p>
<p>进程结构：task struct</p>
<p>状态</p>
<p>flags</p>
<p>父进程</p>
<p>。。。</p>
<p>内核对内存的分配；</p>
<p>分割成内存片，一般为4k，页框，用存储页面数据；</p>
<p>每一个进程都以为自己是唯一的进程；</p>
<p>线性地址空间；</p>
<p>内核只给进程它所需要的；</p>
<p>虚拟内存空间；</p>
<p>堆栈</p>
<p>堆向栈增长，栈向堆生长；</p>
<p>LRU算法，最近最少使用，分配到交换分区；</p>
<p>MMU:Memory Management Unit:内存管理单元；</p>
<p>转换虚拟内存空间和物理内存的映射关系；</p>
<p>缺页；</p>
<p>常驻内存级；必须在内存</p>
<p>虚拟内存级：可被交换的内存空间；</p>
<p>IPC：Inter Press Communication 进程间通信；</p>
<p>同一主机上：</p>
<p>​    singal</p>
<p>​    shm：shared memory</p>
<p>​    semerphor：</p>
<p>跨主机：</p>
<p>RPC：remote procecure call：远程过程调用；</p>
<p>socket文件：记录自己和对方的端口；</p>
<p>​        A                                B</p>
<p>|———|                      |———|</p>
<p>|socket|—————   |socket|</p>
<p>|———|                      |———|</p>
<p>​    |                                        |</p>
<p>​    |                                        |</p>
<p>内核                                    内核</p>
<p>Linux内核：抢占式多任务；</p>
<p>进程类型：</p>
<p>​    守护进程：daemon，在系统引导过程中启动的进程，跟终端无关的进程</p>
<p>​    前台进程：根终端有关，通过终端启动的进程；</p>
<p>​        注意，也可把在前台启动的进程送往后台，以守护模式运行；</p>
<p>进程状态：</p>
<p>​    运行态：running</p>
<p>​    就绪态：ready</p>
<p>​    睡眠态：</p>
<p>​        可中断:interruptable；</p>
<p>​        不可中端：uninterruptable；</p>
<p>​    停止态：暂停于内存中，但不会被调度，除非手动启动：stopped</p>
<p>​    僵尸态：zombie ，（子进程运行中，父进程突然就挂了）</p>
<p>进程的分类：</p>
<p>CPU-BOUND：cpu密集型进程（多分cpu）</p>
<p>IO-BOUND：IO密集型进程（提高优先级）</p>
<p>IO：进程运行过程中加载数据，IO分2段，1.数据从磁盘装入内核。2内核复制一份到内存中，</p>
<p>《《linux内核设计与实现》》。《《深入理解linux内核》》</p>

      
    </div>

    
    
    
      <footer class="post-footer">
        <div class="post-eof"></div>
      </footer>
  </article>
  
  
  

      
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="http://yoursite.com/2020/06/15/13-%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="lcxiao">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Lcxiao's blog">
    </span>
      <header class="post-header">
        <h2 class="post-title" itemprop="name headline">
          
            <a href="/2020/06/15/13-%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80/" class="post-title-link" itemprop="url">13.网络基础</a>
        </h2>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>
              

              <time title="创建时间：2020-06-15 13:07:53 / 修改时间：21:08:21" itemprop="dateCreated datePublished" datetime="2020-06-15T13:07:53+08:00">2020-06-15</time>
            </span>

          

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
          <p>计算机网络基础、</p>
<p>CCNA</p>
<p>IPV4:32位</p>
<p>IPV6:128位</p>
<p>通信时,进程的数字标识</p>
<p>16bit</p>
<p>0-65535:1-65535</p>
<p>1-1023：固定分配，只有管理员有权限启用；</p>
<p>1024-4W：半固定</p>
<p>4W+: 临时</p>
<p>进程地址：</p>
<p>IP：port，socket</p>
<p>MAC：本地通信，范围，本地局域网</p>
<p>IP：界定通信主机，源和目标主机；范围：互联网；</p>
<p>port：界定进程，范围：主机</p>
<p>​                    OSI                                    TCP（事实标准）</p>
<p>资源子网：应用层                                应用层</p>
<p>​                    表示层</p>
<p>​                    会话层</p>
<p>通信子网：传输层                            传输层</p>
<p>​                    网络层                            网络层</p>
<p>​                    数据链路层                    物理层</p>
<p>​                    物理层                            </p>
<p>OS：</p>
<p>用户空间：应用提供资源</p>
<p>内核空间：进程调度，内存分配，网络功能（TCP协议栈）</p>
<p>端口由内核分配</p>
<p>路由表：</p>
<ul>
<li>静态学习</li>
<li>动态学习：rlp2，ospf</li>
</ul>
<p>路由条目：</p>
<ul>
<li>目标地址 下一跳（nexthop）</li>
<li>主机路由</li>
<li>网络路由</li>
<li>默认路由</li>
</ul>
<p>优先选择匹配范围最小的</p>
<p>将一台Linux主机接入到网络中实现网络通信：</p>
<ul>
<li>IP/MASK：本地通信；</li>
<li>路由：跨网络通信；</li>
<li>DNS服务器地址：基于主机名的通信；<ul>
<li>主dns服务器</li>
<li>次dns服务器</li>
<li>第三备用dns服务器</li>
</ul>
</li>
<li>配置方式<ul>
<li>动态分配DHCP</li>
<li>静态分配</li>
<li>ifcfg家族<ul>
<li>ifconfig：配置ip，netmask</li>
<li>route：路由</li>
<li>netstat：状态及统计数据查看</li>
</ul>
</li>
<li>iproute2家族：–&gt;in OBJECT：<ul>
<li>addr：地址和掩码</li>
<li>link：接口</li>
<li>route：路由</li>
<li>ss：状态及统计数据查看</li>
</ul>
</li>
<li>Centos7：NM（NetworkManager）家族<ul>
<li>nmcli：命令行工具</li>
<li>nmtui：text window工具</li>
</ul>
</li>
<li>注意：<ul>
<li>DNS服务器的指定–&gt;配置文件：/etc/resolv.conf</li>
<li>主机名：<ul>
<li>hostname</li>
<li>配置文件：/etc/sysconfig/network</li>
<li>Centos7：hostnamectl</li>
</ul>
</li>
</ul>
</li>
<li>配置文件：<ul>
<li>Redhat及相关发行版<ul>
<li>/etc/sysconfig/network-scripts/ifcfg-NETCARD_NAME</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>网卡接口命名方式：</p>
<ul>
<li><p>传统命名：</p>
<ul>
<li>以太网：ethx,[0,oo],例如eth0,rth1…</li>
<li>PPP网络：pppx[0,…]，例如：ppp0,ppp1，…</li>
</ul>
</li>
<li><p>可预测命名方案（Centos）：</p>
<ul>
<li>支持多种不同的命名机制：</li>
<li>Firmwar，拓扑结构</li>
</ul>
<ol>
<li>如果Firmware或BIOS为主板上集成的设备提供的索引信息可用，则根据此索引进行命名，如eno1，eno2，…</li>
<li>如果Firmware或BIOS为PCI-E扩展槽所提供的索引信息可用，且可预测，则根据此索引进行命名，如ens1，ens2，…</li>
<li>如果硬件接口的物理位置信息可用，则根据此信息命名，如enp2s0，…</li>
<li>如果用户显示定义，也可根据MAC地址命名，例如enx122161ab2e10，…</li>
<li>上述均不可用时，则仍使用传统方式命名；</li>
</ol>
<p>命名格式的组成：</p>
<p>​    en：ethernet</p>
<p>​    wl：wlan</p>
<p>​    ww：wwan</p>
<p>​    名称类型：</p>
<p>​        o&lt;index&gt;：集成设备的设备索引号；</p>
<p>​        s&lt;slot&gt;：扩展槽的索引号；</p>
<p>​        x&lt;MAC&gt;：基于MAC地址的命名；</p>
<p>​        p&lt;bus&gt;s&lt;slot&gt;：基于总线及槽的拓扑结构命名；</p>
</li>
</ul>
<p>PDU –&gt;  数据报文 –&gt; 数据帧</p>
<p>协议传输单元</p>
<p>链路层：以太网帧</p>
<p>互联网层：IP报文</p>
<p>以太网帧：MTU（1500）</p>
<p>linux配置命令：</p>
<p>ifcfg命令家族：ifconfig,route,netstat</p>
<p>ifconfig:</p>
<p>UP：激活</p>
<p>MTU：最大传输单元 (Maximum transmission unit)</p>
<p>MULTICAST:多播（组播）</p>
<p>BROADCAST：广播</p>
<p>prefixlen：前缀</p>
<p>txqueuelen：</p>
<p>RX：接收 ：主要关注dropped,overruns这两项；</p>
<p>TX：发送</p>
<p>ether：centos7表示以太网，相当于centos6 HWaddr：MAC地址；</p>
<p>txqueuelen：传输队列长度</p>
<p>EXP:</p>
<p><code>ifconfig eth1 192.168.10.100/24 up</code></p>
<p><code>ifconfig eth1 192.168.10.100 netmask 255.255.255.0</code></p>
<p>送往内核中的tcp/ip协议栈，立即生效；</p>
<p>启用混杂模式：</p>
<p><code>ifconfig eth1 promisc</code></p>
<p><code>ifconfig eth1 -promisc</code></p>
<p>管理IPV6：</p>
<p><code>add addr/prefixlen</code></p>
<p><code>del addr/prefixlen</code></p>
<p>ROUTE命令：</p>
<p>路由类型：</p>
<p>主机路由    目标为单个IP</p>
<p>网络路由    目标为网络主机</p>
<p>默认路由：目标为任意主机</p>
<p>route -n：查看显示路由条目，-n指以数字格式显示，不反解路由条目；</p>
<p>Kernel IP routing table</p>
<p>Destination     Gateway        Genmask    Flags    Metric    Ref    Use    Iface</p>
<p><code>route add -net 10.0.0.0/8 gw 192.168.10.1 dev eth1</code></p>
<p><code>route add -net 0.0.0.0/0.0.0.0 gw 192.168.10.1 dev eth1</code></p>
<p><code>route add default gw 192.168.10.1</code></p>
<p><code>route del -net 10.0.0.0/8 gw 192.168.10.0</code></p>
<p><code>route del default</code></p>
<p>Netstat 命令</p>
<p>显示路由表：netstat -rn</p>
<p>​    -r：显示内核路由表</p>
<p>​    -n：数字格式</p>
<p>显示网络连接：</p>
<p>​    netstat [–tcp|-t] [–udp|-u]</p>
<p>​    -t：tcp相关的连接</p>
<p>​    -u：UDP</p>
<p>​    -w：raw    </p>
<p>​    -l：处于监听的连接</p>
<p>​    -a：所有状态</p>
<p>​    -n：数字格式显示ip和port</p>
<p>​    -e：扩展格式</p>
<p>​    -p：显示进程及PID</p>
<p>常用组合：ntlp。pantu。nta，utp</p>
<p>​    传输层协议：</p>
<p>​    tcp：面向连接的协议。要建立连接，通信完成拆除连接；</p>
<p>​    udp：无连接的协议；直接发送报文；</p>
<p>所有接口</p>
<p>​    netstat -i</p>
<p>指定接口</p>
<p>​    netsrtat -I &lt;IFACE&gt;</p>
<p>ifup/ifdown 命令</p>
<p>通过配置文件来识别接口并完成配置</p>
<p>/etc/sysconfig/network-scripts/ifcfg-IFACE</p>
<p>hostname命令</p>
<p>查看：hostname</p>
<p>配置：hostname HOSTNAME     重启失效</p>
<p>Centos7：hostnamectl</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">root@testlab:~<span class="comment"># hostnamectl --help</span></span><br><span class="line">hostnamectl [OPTIONS...] COMMAND ...</span><br><span class="line"></span><br><span class="line">Query or change system hostname.</span><br><span class="line"></span><br><span class="line">  -h --<span class="built_in">help</span>              Show this <span class="built_in">help</span></span><br><span class="line">     --version           Show package version</span><br><span class="line">     --no-ask-password   Do not prompt <span class="keyword">for</span> password</span><br><span class="line">  -H --host=[USER@]HOST  Operate on remote host</span><br><span class="line">  -M --machine=CONTAINER Operate on <span class="built_in">local</span> container</span><br><span class="line">     --transient         Only <span class="built_in">set</span> transient hostname</span><br><span class="line">     --static            Only <span class="built_in">set</span> static hostname</span><br><span class="line">     --pretty            Only <span class="built_in">set</span> pretty hostname</span><br><span class="line"></span><br><span class="line">Commands:</span><br><span class="line">  status                 Show current hostname settings	<span class="comment">#显示当前主机名信息；</span></span><br><span class="line">  <span class="built_in">set</span>-hostname NAME      Set system hostname	<span class="comment">#设定主机名，永久有效；</span></span><br><span class="line">  <span class="built_in">set</span>-icon-name NAME     Set icon name <span class="keyword">for</span> host</span><br><span class="line">  <span class="built_in">set</span>-chassis NAME       Set chassis <span class="built_in">type</span> <span class="keyword">for</span> host</span><br><span class="line">  <span class="built_in">set</span>-deployment NAME    Set deployment environment <span class="keyword">for</span> host</span><br></pre></td></tr></table></figure>

<p>配置文件：/etc/sysconfig/network</p>
<p>HOSTNAME=&lt;HOSTNAME&gt;</p>
<p>此方法不会立即生效，但是会一直有效</p>
<p>配置DNS服务器指向:</p>
<p>配置件：/etxc/resolv.conf</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[root@Centos7 ~]<span class="comment"># cat /etc/resolv.conf</span></span><br><span class="line"><span class="comment"># Generated by NetworkManager</span></span><br><span class="line">search localdomain</span><br><span class="line">nameserver 192.168.1.2	<span class="comment">#注意写IP，不能写域名</span></span><br></pre></td></tr></table></figure>

<p>测试DNS（dig、host、nslookup）</p>
<p>dig -t A FQDN</p>
<p>​    FQDN–IP</p>
<p>互联网大多数主机名不支持反解，就是从IP解析到域名</p>
<p>dig -x IP</p>
<p>IP–FQDN</p>
<p><strong>iproute2家族:</strong></p>
<p>IP命令:查看，管理，路由，设备，策略路由，隧道</p>
<p> ip [ OPTIONS ] OBJECT { COMMAND | help }</p>
<p>OBJECT ：命令可简写，只要能唯一识别</p>
<p>link | address | route</p>
<p>ip link：网络设备的配置（add、show、set、delete）</p>
<ul>
<li>ip link set  :改便设备运行状态<ul>
<li>ip link set dev IFACE up/down</li>
<li>multicast on/off 开启/关闭多播功能；</li>
<li>promisc on/off：启用/关闭混杂模式</li>
<li>name:改网卡名（改之前先停用网卡）</li>
<li>txqueuelen：队列长度</li>
<li>mtu：设置MTU大小，默认1500</li>
<li>netns：net namespace，用于将接口移动到指定的网络名称空间去（类似虚拟机）<ul>
<li>ip netns add </li>
<li>ip netns list</li>
<li>ip netns del</li>
<li>ip netns exec NAME COMMAAND</li>
</ul>
</li>
</ul>
</li>
<li>ip link show</li>
<li>ip link help</li>
</ul>
<p><strong>ip address add</strong></p>
<p>​    ip address add IFADDR dev IFNAME</p>
<p>​    label NAME ：为额外添加的IP地址指明接口别名；</p>
<p>​    [broadcast ADDRESS]：广播地址；会根据IP和NETMASK自动计算得到；</p>
<p>​    [scope SCOPE_VALUE]：global（全局可用）、site（IPV6）、link（接口可用）、host（仅本机可用、内部使用）</p>
<p><strong>ip address del</strong></p>
<p>​    ip address delIFADDR dev IFNAME</p>
<p> <strong>ip address show</strong></p>
<p>​    [iFACE] ：仅显示指定接口；</p>
<p>ip address flush dev</p>
<p><strong>ip route add|delete|show |flush|get</strong></p>
<p>​    ip route add TYPE PREFIX via GW [dev IFACE] [src SOURCE_IP]</p>
<p>exp:</p>
<p><code>ip route add 192.168.0.0/24 via 10.0.0.1 dev eth1</code></p>
<p><code>ip route add 192.168.1.0/24 via 192.168.1.128 dev eth1 src 192.168.1.128</code> （src为本机网卡地址中的其中一个）</p>
<p>​    ip route add default via GW；</p>
<p><code>ip route add default via 192.168.1.2</code></p>
<p><strong>ip route del</strong></p>
<p>#ip route delete 192.168.1.0/24</p>
<p><strong>ip route get TYPE PREFIX</strong></p>
<p>#ip route get 192.168.0.0/24</p>
<p>SS 命令：</p>
<ul>
<li>-t ：tcp</li>
<li>-u：udp</li>
<li>-w：raw</li>
<li>-l：listen</li>
<li>-a：所有状态</li>
<li>-n：数字格式</li>
<li>-p：PID和进程</li>
<li>-e：扩展</li>
<li>-m：内存用量</li>
<li>-o：计时器信息</li>
</ul>
<p>FILTER := [ state STATE-FILTER ] [ EXPRESSION ]：过滤选项</p>
<p>TCP的常见状态：</p>
<p>TCP FSM：</p>
<p>​    LISTEN：监听</p>
<p>​    ESTABLISEHD：建立的连接</p>
<p>​    FIN_WAIT_1：</p>
<p>​    FIN_WAIT_2:</p>
<p>​    SYN_SENT:</p>
<p>​    SYN_RECV:</p>
<p>​    CLOSED:</p>
<p>EXPRESSION:</p>
<p>​    dport=</p>
<p>​    sport=</p>
<p>​        示例：ss -tan state 状态</p>
<p>配置文件：/etx/sysconfig/network-scripts/ifcfg-IFACE</p>
<p>IP/NETMASK/GW/DNS等专属的配置文件：</p>
<p>IFACE：接口名称</p>
<p>路由的相关配置文件：</p>
<p>/etc/sysconfig/network-scripts/route-IFACE</p>
<p>配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE通过大量参数来定义接口的属性；其可通过vim等文本编辑器直接修改，也可以使用专用的命令的进行修改</p>
<p>centos6：system-config-network</p>
<p>centos7：nmtui，nmcli</p>
<p>ifcfg-IFACE配置文件参数：</p>
<ul>
<li>DEVICE：设备名称，与IFACE必须保持一致；</li>
<li>ONBOOT：在系统引导过程中是否激活设备；</li>
<li>NETBOOT：是否支持网络引导；</li>
<li>UUID：此设备的唯一标识；</li>
<li>IPV6INIT：是否初始化IPV6；</li>
<li>BOOTPROTO=激活此接口时使用什么协议配置接口属性，常用的有dhcp，bootp，static=none；</li>
<li>TYPE：指定接口类型；</li>
<li>DNS1~~DNS2：DNS服务器指向；</li>
<li>DOMAIN：DNS搜索域；</li>
<li>DEFROUTE：是否默认路由所使用接口；</li>
<li>GATEWAY：默认网关；</li>
<li>IPADDR：IP地址；</li>
<li>NETMASK：子网掩码；Centos7支持使用prefix以长度方式指明子网掩码；</li>
<li>IPV4_FAILURE_FATAL ：</li>
<li>USERCTL：是否允许普通用户控制此设备；</li>
<li>PEERDNS：如果bootproto的值为’dhcp‘，是否允许dhcpserver分配的dns服务器指向覆盖本地手动指定的dns服务器；默认为允许；</li>
<li>NM_CONTROLLED：是否使用NetworkManager服务来控制接口配置；</li>
</ul>
<p>网络服务：</p>
<p>​    network</p>
<p>​    NetworkManager</p>
<p>管理网络服务</p>
<p>​    centos6：service SERVICE {start|status|restart|stop}</p>
<p>​    centos7：systemctl {status|start|stop|restart} SERVICE</p>
<p>配置修改以后，如果要生效，需要重启网络服务</p>
<p>centos6：service network restart</p>
<p>centos7：systemctl restart network.service</p>
<p>用到非默认网关路由：/etc/sysconfig/network-scripts/route-IFACE</p>
<p>支持两种配置方式，但是不可混用；</p>
<ol>
<li><p>每行一个路由条目</p>
<p>​    TARGET via GW</p>
<ol start="2">
<li>每三行一个路由条目：</li>
</ol>
<p>ADDRESS#=TARGET</p>
<p>NETMASK#=MASK</p>
<p>GATEWAY#=NEXTHOP</p>
</li>
</ol>
<p>ifconfig 也可以添加多个IP地址</p>
<p>1.ifconfig IFACE——LABEL IPADDR/NETMASK</p>
<p>​    IFACE_LABEL：eth0，eth1</p>
<p>为别名添加配置文件：</p>
<p>DEVICE=IFACE_LABEL</p>
<p>BOOTPROTO：网上别名不支持动态获取</p>
<p>static，none；</p>
<p>NMCLI：</p>

      
    </div>

    
    
    
      <footer class="post-footer">
        <div class="post-eof"></div>
      </footer>
  </article>
  
  
  

      
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="http://yoursite.com/2020/06/02/Trinity%E5%AE%89%E8%A3%85%E5%A4%87%E5%BF%98/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="lcxiao">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Lcxiao's blog">
    </span>
      <header class="post-header">
        <h2 class="post-title" itemprop="name headline">
          
            <a href="/2020/06/02/Trinity%E5%AE%89%E8%A3%85%E5%A4%87%E5%BF%98/" class="post-title-link" itemprop="url">Trinity安装备忘</a>
        </h2>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>
              

              <time title="创建时间：2020-06-02 15:29:35 / 修改时间：23:29:51" itemprop="dateCreated datePublished" datetime="2020-06-02T15:29:35+08:00">2020-06-02</time>
            </span>

          

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
          <h1 id="Trinity-core-3-3-5"><a href="#Trinity-core-3-3-5" class="headerlink" title="Trinity core 3.3.5"></a>Trinity core 3.3.5</h1><h2 id="1-Linux-Requirements"><a href="#1-Linux-Requirements" class="headerlink" title="1. Linux Requirements"></a>1. Linux Requirements</h2><h3 id="debian-10-4"><a href="#debian-10-4" class="headerlink" title="debian 10.4"></a>debian 10.4</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">apt update</span><br><span class="line">apt install git clang cmake make gcc g++ libmariadbclient-dev libssl-dev libbz2-dev libreadline-dev libncurses-dev libboost-all-dev mariadb-server p7zip default-libmysqlclient-dev</span><br><span class="line">update-alternatives --install /usr/bin/cc cc /usr/bin/clang 100</span><br><span class="line">update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang 100</span><br></pre></td></tr></table></figure>

<h3 id="ubuntu-19-10"><a href="#ubuntu-19-10" class="headerlink" title="ubuntu 19.10"></a>ubuntu 19.10</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">apt update</span><br><span class="line">apt install git clang cmake make gcc g++ libmariadbclient-dev libssl-dev libbz2-dev libreadline-dev libncurses-dev libboost-all-dev mariadb-server p7zip libmariadb-client-lgpl-dev-compat</span><br><span class="line">update-alternatives --install /usr/bin/cc cc /usr/bin/clang 100</span><br><span class="line">update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang 100</span><br></pre></td></tr></table></figure>

<h3 id="Fedora-based-distributions"><a href="#Fedora-based-distributions" class="headerlink" title="Fedora based distributions"></a>Fedora based distributions</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">dnf install https://dev.mysql.com/get/mysql57-community-release-fc27-1.noarch.rpm</span><br><span class="line">dnf install git clang cmake make gcc gcc-c++ community-mysql-devel compat-openssl10-devel bzip2-devel readline-devel ncurses-devel boost-devel community-mysql-server p7zip</span><br><span class="line">rm -f /usr/bin/c++</span><br><span class="line">update-alternatives --install /usr/bin/cc cc /usr/bin/clang 100</span><br><span class="line">update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang 100</span><br></pre></td></tr></table></figure>

<h2 id="2-Core-Installation"><a href="#2-Core-Installation" class="headerlink" title="2. Core Installation"></a>2. Core Installation</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">adduser &lt;username&gt;</span><br><span class="line">su - &lt;username&gt;</span><br><span class="line">git <span class="built_in">clone</span> -b 3.3.5 git://github.com/TrinityCore/TrinityCore.git</span><br><span class="line"><span class="built_in">cd</span> TrinityCore</span><br><span class="line">mkdir build</span><br><span class="line"><span class="built_in">cd</span> build</span><br><span class="line">cmake ../ [additional parameters]</span><br></pre></td></tr></table></figure>

<h3 id="The-above-parameters-when-combined-into-a-full-example"><a href="#The-above-parameters-when-combined-into-a-full-example" class="headerlink" title="The above parameters when combined into a full example :"></a>The above parameters when combined into a full example :</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">By default this is the only row you will need to run to setup your install:</span><br><span class="line">cmake ../ -DCMAKE_INSTALL_PREFIX=/home/&lt;username&gt;/server</span><br><span class="line"> </span><br><span class="line">Another Examples Below:</span><br><span class="line">cmake ../ -DCMAKE_INSTALL_PREFIX=/home/wow/server -DTOOLS=0</span><br><span class="line">cmake ../ -DCMAKE_INSTALL_PREFIX=/home/<span class="variable">$USER</span>/server -DTOOLS=0 -DWITH_WARNINGS=1</span><br></pre></td></tr></table></figure>

<h3 id="3-Building-the-core"><a href="#3-Building-the-core" class="headerlink" title="3. Building the core"></a>3. Building the core</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">make -j&lt;number of cores&gt;</span><br><span class="line">make install</span><br></pre></td></tr></table></figure>

<h3 id="update"><a href="#update" class="headerlink" title="update"></a>update</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> ~/TrinityCore/</span><br><span class="line"><span class="comment"># For 3.3.5 Branch</span></span><br><span class="line">git pull origin 3.3.5</span><br></pre></td></tr></table></figure>

<h2 id="4-Server-Setup"><a href="#4-Server-Setup" class="headerlink" title="4. Server Setup"></a>4. Server Setup</h2><table>
<thead>
<tr>
<th>Directory</th>
<th>Branch</th>
<th></th>
</tr>
</thead>
<tbody><tr>
<td>dbc</td>
<td>all</td>
<td>Mandatory</td>
</tr>
<tr>
<td>maps</td>
<td>all</td>
<td>Mandatory</td>
</tr>
<tr>
<td>vmaps</td>
<td>all</td>
<td>HIGHLY Recommended</td>
</tr>
<tr>
<td>mmaps</td>
<td>all</td>
<td>HIGHLY Recommended</td>
</tr>
<tr>
<td>cameras</td>
<td>all</td>
<td>Recommended</td>
</tr>
<tr>
<td>gt</td>
<td>master only</td>
<td>Mandatory</td>
</tr>
</tbody></table>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> &lt;your WoW client directory&gt;</span><br><span class="line">/home/&lt;username&gt;/server/bin/mapextractor</span><br><span class="line">mkdir /home/&lt;username&gt;/server/data</span><br><span class="line">  </span><br><span class="line"><span class="comment"># Next line is 3.3.x only</span></span><br><span class="line">cp -r dbc maps /home/&lt;username&gt;/server/data</span><br><span class="line"></span><br><span class="line"><span class="comment"># edit worldserver.conf and change datadir from "." to "../data"</span></span><br></pre></td></tr></table></figure>

<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> &lt;your WoW client directory&gt;</span><br><span class="line">/home/&lt;username&gt;/server/bin/vmap4extractor</span><br><span class="line">mkdir vmaps</span><br><span class="line">/home/&lt;username&gt;/server/bin/vmap4assembler Buildings vmaps</span><br><span class="line">cp -r vmaps /home/&lt;username&gt;/server/data</span><br></pre></td></tr></table></figure>

<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> &lt;your WoW client directory&gt;</span><br><span class="line">mkdir mmaps</span><br><span class="line">/home/&lt;username&gt;/server/bin/mmaps_generator</span><br><span class="line">cp -r mmaps /home/&lt;username&gt;/server/data</span><br></pre></td></tr></table></figure>

<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">cp worldserver.conf.dist worldserver.conf</span><br><span class="line">cp authserver.conf.dist authserver.conf <span class="comment"># 3.3.5 only</span></span><br><span class="line">cp bnetserver.conf.dist bnetserver.conf <span class="comment"># 6.x, 7.x only</span></span><br></pre></td></tr></table></figure>

<h2 id="5-Databases-Installation"><a href="#5-Databases-Installation" class="headerlink" title="5. Databases Installation"></a>5. Databases Installation</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">CREATE USER &#39;trinity&#39;@&#39;localhost&#39; IDENTIFIED BY &#39;trinity&#39; WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0;</span><br><span class="line"></span><br><span class="line">GRANT USAGE ON * . * TO &#39;trinity&#39;@&#39;localhost&#39;;</span><br><span class="line"></span><br><span class="line">CREATE DATABASE &#96;world&#96; DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;</span><br><span class="line"></span><br><span class="line">CREATE DATABASE &#96;characters&#96; DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;</span><br><span class="line"></span><br><span class="line">CREATE DATABASE &#96;auth&#96; DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;</span><br><span class="line"></span><br><span class="line">GRANT ALL PRIVILEGES ON &#96;world&#96; . * TO &#39;trinity&#39;@&#39;localhost&#39; WITH GRANT OPTION;</span><br><span class="line"></span><br><span class="line">GRANT ALL PRIVILEGES ON &#96;characters&#96; . * TO &#39;trinity&#39;@&#39;localhost&#39; WITH GRANT OPTION;</span><br><span class="line"></span><br><span class="line">GRANT ALL PRIVILEGES ON &#96;auth&#96; . * TO &#39;trinity&#39;@&#39;localhost&#39; WITH GRANT OPTION;</span><br></pre></td></tr></table></figure>



<h2 id="6-Networking"><a href="#6-Networking" class="headerlink" title="6. Networking"></a>6. Networking</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">mysql -u root -p</span><br><span class="line">use auth</span><br><span class="line">update realmlist <span class="built_in">set</span> address=<span class="string">'IP'</span>;</span><br></pre></td></tr></table></figure>

<h2 id="7-Final-Server-Steps"><a href="#7-Final-Server-Steps" class="headerlink" title="7. Final Server Steps"></a>7. Final Server Steps</h2><p><strong>account create USER PASSWORD</strong></p>
<p><strong>account set gmlevel USER 3 -1</strong></p>
<h2 id="8-Client-Setup"><a href="#8-Client-Setup" class="headerlink" title="8. Client Setup"></a>8. Client Setup</h2><ul>
<li>Open the realmlist.wtffile inside your World of Warcraft\Data folder. The IP in the realmlist.wtf file should be exactly the same as the IP address you entered in the realmlist table above.<ul>
<li>Change the first line to: *<em>set realmlist *</em></li>
<li>Example: <strong>set realmlist 127.0.0.1</strong></li>
</ul>
</li>
<li>(Optional) If you wish to use the WoW Launcher.exe to run your client then you must change your <strong>set patchlist</strong> to the same ip/dns name as your realmlist.</li>
</ul>
<h1 id="mysql命令导入"><a href="#mysql命令导入" class="headerlink" title="mysql命令导入"></a>mysql命令导入</h1><h2 id="1-mysql命令导入多个sql文件方法："><a href="#1-mysql命令导入多个sql文件方法：" class="headerlink" title="1 mysql命令导入多个sql文件方法："></a>1 mysql命令导入多个sql文件方法：</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ for SQL in *.sql; do mysql -uroot -p&quot;123456&quot; mydb &lt; $SQL; done</span><br></pre></td></tr></table></figure>

<h2 id="2-source命令导入"><a href="#2-source命令导入" class="headerlink" title="2 source命令导入"></a>2 source命令导入</h2><p><code>source</code>命令需要首先进入<strong>MySQL命令行</strong>：</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ mysql -uroot -p&quot;123456&quot;</span><br></pre></td></tr></table></figure>

<p><strong>导入多个sql**</strong>文件<strong>需要先创建一个额外的文件，名字随意，这里我们取：</strong>all.sql**，内容：</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">source user1.sql</span><br><span class="line">source user2.sql</span><br><span class="line">source user3.sql</span><br></pre></td></tr></table></figure>

<p><strong>注意，这里每行一条，必须以source命令开头。</strong></p>
<p>然后用<code>source</code>命令执行该文件：</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">mysql &gt; use mydb;</span><br><span class="line">mysql &gt; source &#x2F;home&#x2F;gary&#x2F;all.sql</span><br></pre></td></tr></table></figure>

      
    </div>

    
    
    
      <footer class="post-footer">
        <div class="post-eof"></div>
      </footer>
  </article>
  
  
  


  
  <nav class="pagination">
    <a class="extend prev" rel="prev" href="/"><i class="fa fa-angle-left" aria-label="上一页"></i></a><a class="page-number" href="/">1</a><span class="page-number current">2</span><a class="page-number" href="/page/3/">3</a><a class="page-number" href="/page/4/">4</a><a class="extend next" rel="next" href="/page/3/"><i class="fa fa-angle-right" aria-label="下一页"></i></a>
  </nav>



          </div>
          

<script>
  window.addEventListener('tabs:register', () => {
    let { activeClass } = CONFIG.comments;
    if (CONFIG.comments.storage) {
      activeClass = localStorage.getItem('comments_active') || activeClass;
    }
    if (activeClass) {
      let activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`);
      if (activeTab) {
        activeTab.click();
      }
    }
  });
  if (CONFIG.comments.storage) {
    window.addEventListener('tabs:click', event => {
      if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return;
      let commentClass = event.target.classList[1];
      localStorage.setItem('comments_active', commentClass);
    });
  }
</script>

        </div>
          
  
  <div class="toggle sidebar-toggle">
    <span class="toggle-line toggle-line-first"></span>
    <span class="toggle-line toggle-line-middle"></span>
    <span class="toggle-line toggle-line-last"></span>
  </div>

  <aside class="sidebar">
    <div class="sidebar-inner">

      <ul class="sidebar-nav motion-element">
        <li class="sidebar-nav-toc">
          文章目录
        </li>
        <li class="sidebar-nav-overview">
          站点概览
        </li>
      </ul>

      <!--noindex-->
      <div class="post-toc-wrap sidebar-panel">
      </div>
      <!--/noindex-->

      <div class="site-overview-wrap sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
  <p class="site-author-name" itemprop="name">lcxiao</p>
  <div class="site-description" itemprop="description"></div>
</div>
<div class="site-state-wrap motion-element">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
          <a href="/archives/">
        
          <span class="site-state-item-count">38</span>
          <span class="site-state-item-name">日志</span>
        </a>
      </div>
      <div class="site-state-item site-state-categories">
        <span class="site-state-item-count">1</span>
        <span class="site-state-item-name">分类</span>
      </div>
      <div class="site-state-item site-state-tags">
            <a href="/tags/">
          
        <span class="site-state-item-count">9</span>
        <span class="site-state-item-name">标签</span></a>
      </div>
  </nav>
</div>


  <div class="links-of-blogroll motion-element">
    <div class="links-of-blogroll-title">
      <i class="fa fa-fw fa-link"></i>
      Links
    </div>
    <ul class="links-of-blogroll-list">
        <li class="links-of-blogroll-item">
          <a href="http://163.com/" title="http:&#x2F;&#x2F;163.com" rel="noopener" target="_blank">163</a>
        </li>
        <li class="links-of-blogroll-item">
          <a href="http://baidu.com/" title="http:&#x2F;&#x2F;baidu.com" rel="noopener" target="_blank">baidu</a>
        </li>
        <li class="links-of-blogroll-item">
          <a href="/dalipan.com" title="dalipan.com">dalipan</a>
        </li>
        <li class="links-of-blogroll-item">
          <a href="https://google.com/" title="https:&#x2F;&#x2F;google.com" rel="noopener" target="_blank">Google</a>
        </li>
    </ul>
  </div>

      </div>

    </div>
  </aside>
  <div id="sidebar-dimmer"></div>


      </div>
    </main>

    <footer class="footer">
      <div class="footer-inner">
        

        

<div class="copyright">
  
  &copy; 
  <span itemprop="copyrightYear">2020</span>
  <span class="with-love">
    <i class="fa fa-user"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">lcxiao</span>
</div>

        








      </div>
    </footer>
  </div>

  
  <script src="/lib/anime.min.js"></script>
  <script src="/lib/velocity/velocity.min.js"></script>
  <script src="/lib/velocity/velocity.ui.min.js"></script>

<script src="/js/utils.js"></script>

<script src="/js/motion.js"></script>


<script src="/js/schemes/pisces.js"></script>


<script src="/js/next-boot.js"></script>




  















  

  

<script src="/live2dw/lib/L2Dwidget.min.js?094cbace49a39548bed64abff5988b05"></script><script>L2Dwidget.init({"log":false,"pluginJsPath":"lib/","pluginModelPath":"assets/","pluginRootPath":"live2dw/","tagMode":false});</script></body>
</html>
